/**
 * SPDX-FileCopyrightText: 2023-2025 Sangfor Technologies Inc.
 * SPDX-License-Identifier: Mulan PSL v2
 */
/**
 * This is a karma config file. For more details see
 *   http://karma-runner.github.io/0.13/config/configuration-file.html
 * we are also using it with karma-webpack
 *   https://github.com/webpack/karma-webpack
 */

var path = require('path');
var merge = require('webpack-merge');
var baseConfig = require('../../build/webpack.base.conf');
var utils = require('../../build/utils');
var webpack = require('webpack');
var projectRoot = path.resolve(__dirname, '../../');

var webpackConfig = merge(baseConfig, {

    // use inline sourcemap for karma-sourcemap-loader
    module: {
        loaders: utils.styleLoaders()
    },
    devtool: '#inline-source-map',
    vue: {
        loaders: {
            js: 'isparta'
        }
    },
    plugins: [
        new webpack.DefinePlugin({
            'process.env': require('../../config/test.env')
        })
    ]
});

// no need for app entry during tests
delete webpackConfig.entry;

// make sure isparta loader is applied before eslint
webpackConfig.module.preLoaders = webpackConfig.module.preLoaders || [];
webpackConfig.module.preLoaders.unshift({
    test: /\.js$/,
    loader: 'isparta',
    include: path.resolve(projectRoot, 'src')
});

// only apply babel for test files when using isparta
webpackConfig.module.loaders.some(function (loader, i) {
    if (loader.loader === 'babel') {
        loader.include = path.resolve(projectRoot, 'test/unit');
        return true;
    }
});

var args = process.argv.slice(5);
var files = [

    // 中英文有个bug，先这样
    './i18n.js',

    // 兼容
    '../../node_modules/babel-polyfill/dist/polyfill.js',

    // 入口
    './index.js'
];
var preprocessors = {
    './index.js': ['webpack', 'sourcemap']
};
if (Array.isArray(args) && args.length) {
    files.pop();
    args.forEach(function (file) {
        files.push({
            pattern: file,
            watch: false
        });
        preprocessors[file] = ['webpack', 'sourcemap'];
    });
}


module.exports = function (config) {
    config.set({

        // to run in additional browsers:
        // 1. install corresponding karma launcher
        //    http://karma-runner.github.io/0.13/config/browsers.html
        // 2. add it to the `browsers` array below.
        browsers: ['PhantomJS'],

        frameworks: ['mocha', 'sinon-chai'],

        reporters: ['spec', 'coverage'],

        files: files,
        preprocessors: preprocessors,

        webpack: webpackConfig,
        webpackMiddleware: {
            noInfo: true
        },
        coverageReporter: {
            dir: './coverage',
            reporters: [
                { type: 'lcov', subdir: '.' },
                { type: 'text-summary' }
            ]
        }
    });
};
